package chwgigs;

public class J06_Conversions {

	//<형변환 conversions>

//서로 다른 자료형을 처리 할 때 종종 변환이 필요
//   ex) float avg=(float)tot/3;
//두 변수가 같은 자료형이라면 대입은 성공적으로 처리 
// 같은 유형으로 변환하는 것을 동질성 변환이라 함
 
// 하지만, 다른 유형으로의 변환은 성공을 보장 못한다. 
//기본자료형 변환에는 확대 축소 변환이 있다	
	
 //<확대형 변환 Widening conversion>
// int 형에서 long 형으로의 변환처럼 첫번째 유형에 비해 두번째 유형의 크기가  같거나 클때 발생함 
// 확대 변환시 정보 손실의 위험은 발생하지 않음	
//단, 정밀도 손실이 간혹 발생 할 수 있음
// 확대 변환은 암시적으로 일어남

	// <축소 형변환 narrowing conversion>
	// long 형에서  int  형으로의 변환처럼 
	//첫번째 유형에 비해 두번째 유형의 크기가 작을때 발생함
	//축소 형변환은 확대 형 변환과 달리 '명시적'이어야 한다
	//즉, 괄호안에 변환하려는 유형을 지정해야만 한다. (Cast 연산자라 함)
	//(float)는 컴파일러에게 float형으로 변환 할 것을 지시함
	// 이것은 정보 손실이 발생 할 수 있기 때문에 유의해야 한다. 그리고 프로그램의 결함을 야기함.
	
	public static void main(String[] args) {
		
		// 동질성 변환identity conversion
		int a=90;
		int b=a;
	    	
		// 확대 형변환
		long c=a;
		
		//축소 형변환
		int d=(int)c;
		long e=1234456678978L;
		int f=(int)e;
		System.out.println(e);
		System.out.println(f);
		
		
//연산자 우선순위
	
	int g=1;
	int h=2;
	int i=3;
	int j=g+h*i;
	
	System.out.println(j);
		
	//모든 연산자에는 우선순위가 있음.
	//가장 높은 우선순위는 () ,++,--
	

	
	int k=5;
	int l=5;
	boolean m=k*5==l+20;
	System.out.println(m);
		
	 //<승격 promotion>
	   byte n=5;
	  // byte o=-n;
	 // 놀랍게도 오류 발생!
	
	 // 단항 연산자 -에 의해 n 변수가 int 형으로 승격!!
     // 문제 해결을 위해 명시적 축소 형변환을 사용하거나 
	  //변수를 int  형으로 바꾸면 됨
	   
	   byte o=(byte)-n;
	   int p =-n;  // 이처럼 형변환 해야 함
	   
	   short q=100;
	   short r=200;
	 //  short s=q+r
	
	//이항 연산자 +에 의해 q,r 변수가 int  형으로 승격!!
			   short s=(short)(q+r) ;
			   int t=q+r;
    // 위처럼 형변환 해야 함	   
   
   // <주석 comments>
   // 프로그램 코드에 덧붙이는 설명문, 해설을 말한다.
  // 컴파일러가 소스를 컴파일 할때 주석은 무시하고 넘어감
  // 해당 코드가 제공하는 기능, 용도 , 의미를  쉽게 파악하도록 하기 위해 주석을 다는 것은  좋은 습관임
  // 자바에서는 2가지 주석 유형제공
 // 전통적인 주석은 /*와 /* 사이에 주석을 작성
 // 주의) 중첩해서 사용하면 안됨!!
// 한 줄 주석인 //는 코드 끝에 작성하는 주석
			   
	/*이 문장은 주석*/
	 //   /*    /*  /**  */ 이처럼 주석을 중첩하면 안됨//

	//< 연결 연산자>
	// 일반적으로 +연산자는 두 수를 더하는 기능
	// 하지만 문자나 문자열에 +연산자를 사용하면 앞의 문자와 뒤의 문자를 연결해 줌
	
	char u='가';
	char v='나';
	
	System.out.println(u);
	System.out.println(v);
	System.out.println("" +u+v); 
     
   
	// 하지만 문자에 사용하는 + 연산자로 인한 
	//오버헤드 때문에 StringBuilder 클래스를 주로 사용
	
	 
	
	
	
	
	
	
	
	
	}

}
